Software solutions typically include multiple products that need to work together. Products have various attributes, such as version, edition, bitness (that is, word size in bits), set of features supported, platforms supported, and so on. A product may have dependencies on other products or components. These dependent products may in turn have another set of dependencies. Dependencies can be of various types such as pre-requisite, supported software, bundled, and the like. Dependencies of a product are typically determined by the attributes of the product, such as the version, edition, features supported, and so on. For example, by changing the version or choosing only a subset of the features, the dependencies of a product can be reduced. Each product also has a lifecycle that includes its release date, supported date and end of life date. When a product reaches end of life, it is necessary to find a new version of the same product or a different product to replace it in such a way that the solution as a whole is still compatible. The dependency information is typically spread over multiple sources in various formats such as text, hypertext markup language (html), portable document format (pdf), and the like.